package com.controller;

import com.datos.AutenticarUsu;
import com.ejb.UsuarioFacade;
import com.entidades.Usuario;
import com.security.envioCorreo;
import com.security.validaciones;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

@ManagedBean
@RequestScoped
public class LoginController {

    public static final String USER_SESSION_KEY = "user";
    private String correoelectronico;
    private String password;
    private FacesContext context = FacesContext.getCurrentInstance();
    @EJB
    UsuarioFacade UsuarioFacade;

    public LoginController() {
    }

    public String getCorreoelectronico() {
        return correoelectronico;
    }

    public void setCorreoelectronico(String correoelectronico) {
        this.correoelectronico = correoelectronico;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String autenticar() {
        
        com.security.validaciones objValidacion = new validaciones();
        if ((objValidacion.validateEmail(correoelectronico))) {
                Usuario login = UsuarioFacade.Consultar(correoelectronico);

                if (login != null) {
                    
                    AutenticarUsu autenticarusu = new AutenticarUsu();
                    autenticarusu.setCedula(login.getCedula());
                    autenticarusu.setCorreo(login.getCorreoelectronico());
                    
                    if (login.getCorreoelectronico().equalsIgnoreCase(correoelectronico) && login.getContrasena().equals(password) && login.getEstado().equalsIgnoreCase("True")) {
                        context.getExternalContext().getSessionMap().put(USER_SESSION_KEY, autenticarusu);
                        if (login.getTipo().equalsIgnoreCase("ADMINISTRADOR")) {
                            return "/faces/Cualquiera/Administrador/index1.xhtml";
                        } else {
                            return "/faces/Cualquiera/Usuario/index.xhtml";
                        }
                    } else {
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                "¡Ingreso fallido!",
                                "Usuario y/o contraseña incorrectos.");
                        context.addMessage(null, message);
                        return null;
                    }
                } else {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                            "¡Ingreso fallido!",
                            "Usuario y/o contraseña incorrectos.");
                    context.addMessage(null, message);
                    return null;
                }
        } else {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL,
                    "El texto ingresado no es un correo electronico valido",
                    "");
            context.addMessage(null, message);
            return null;
        }
    }

    public String logout() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        if (session != null) {
            session.invalidate();
        }
        return "/security/login.xhtml?faces-redirect=true";
    }

    public String enviarcorreo() {

        com.security.validaciones objValidacion = new validaciones();
        if (objValidacion.validateEmail(correoelectronico)) {

            Usuario correo = UsuarioFacade.Consultar(correoelectronico);

            if (correo != null) {
                com.security.envioCorreo objEnvioCorreo = new envioCorreo();
                if (objEnvioCorreo.enviarEmail(correo)) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
                            "¡Verifica tu bandeja de correo!",
                            "");
                    context.addMessage(null, message);
                    return null;
                } else {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL,
                            "¡Tenemos problemas para enviar el correo, por favor consulta más tarde!",
                            "");
                    context.addMessage(null, message);
                    return null;
                }
            } else {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "El correo no fue encontrado en el sistema",
                        "");
                context.addMessage(null, message);
                return null;
            }
        } else {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "El texto ingresado no es un correo electronico valido",
                    "");
            context.addMessage(null, message);
            return null;
        }
    }
}